﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Libreria.DAL;

namespace Libreria.RFID.Modelo
{
    [CAD(true, CAD.TiposBD._SQLServer, "Objeto")]
   public class Objeto
    {
        //Atributo de abstracción
        private MOR accesoADatos;

        private int? codigo;  
        private string descripcion;
        private Boolean? inventario;
        private Boolean? prestamo;


         // Constructor de la clase
        public Objeto()
        {
        }

        public Objeto(string cadenaDeConexion)
        {
            this.accesoADatos = MOR.Instance(cadenaDeConexion);
        }

       //Encapsulamiento y mapeo de atributos
        [Tipo(Tipo.TiposSQLServer._int, "codigoObjeto",true,true)]
        public int? Codigo
        {
            get { return codigo; }
            set { codigo = value; }
        }
        [Tipo(Tipo.TiposSQLServer._varchar, "Descripcion")]
        public string Descripcion
        {
            get { return descripcion; }
            set { descripcion = value; }
        }
        [Tipo(Tipo.TiposSQLServer._bit,"Inventario")]
        public Boolean? Inventario
        {
            get { return inventario; }
            set { inventario = value; }
        }
 
        [Tipo(Tipo.TiposSQLServer._bit,"Prestamo")]
        public Boolean? Prestamo
        {
            get { return prestamo; }
            set { prestamo = value; }
        }
        
        //Métodos de abtracción de datos
        public void crear()
        {
            this.Codigo = this.accesoADatos.crearRegistro(this);
            
        }
        public List<Objeto> consultar()
        {
            List<Object> registros = this.accesoADatos.consultarRegistros(this, false);
            List<Objeto> resultado = new List<Objeto>();
            foreach (Object registro in registros)
            {
                resultado.Add((Objeto)registro);
            }
            return resultado;
        }

        public Objeto consultarPorCodigo(Int32 codigo)
        {
            this.Codigo = codigo;
            List<Object> registros = this.accesoADatos.consultarRegistros(this, true);
            Objeto resultado = null;
            if (registros != null)
            {
                if (registros.Count == 1)
                {
                    resultado = (Objeto)registros[0];
                }
            }
            return resultado;
        }

        public void actualizar()
        {
            this.accesoADatos.actualizarRegistroConNulos(this);
        }

        public void eliminar()
        {
            this.accesoADatos.borrarRegistro(this);
        }

    }
}
